/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestionnaires;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import modeles.Acteur;
import modeles.Commentaire;
import modeles.Film;
import modeles.Genre;
import modeles.Note;
import modeles.Realisateur;
import modeles.Utilisateur;

/**
 *
 * @author mazid
 */
@Stateless
public class GestionFilm {
    @PersistenceContext(unitName = "Projet-WebPU")
    private EntityManager em;
/**
 * fonction qui crée un film
 */
    public Film creerUnFilm(String titre,String desc, String image,int duree,int annee, Genre genre, 
            Collection<Acteur> acteurs,Realisateur real, Collection<Commentaire> c, Collection<Note> note){
        Film film = new Film(titre, desc, image,duree,annee);
        film.setGenre(genre);
        film.setActeurs(acteurs);
        film.setRealisateur(real);
        film.setCommentaires(c);
        film.setNotes(note);
        em.persist(film);
        return film;
        
    }
    public Utilisateur creerUtilisateur(String login, String pwd, String nomU,String prenomU,String email,
            Collection<Commentaire> comms, Collection<Note> notes){
        Utilisateur u = new  Utilisateur(login, pwd, nomU, prenomU, email);
        u.setCommentaires(comms);
        u.setNotes(notes);
        em.persist(u);
        return u;
    }
  
    /**
     * recupere un film par sont id. 
     * @param idFilm identifiant du film
     * @return le film
     */
    public Film getFilmById(long idFilm){
        Query q = em.createQuery("select f from Film f WHERE f.id=:param");
        q.setParameter("param", idFilm);
        Film f = null;
        try {
            f = (Film)q.getSingleResult();
        } catch (Exception e) {
            f=null;
        }
        return f;
        
    }
   
/**
 * fonction qui crée les films de test
 */
    public void creerFilmsTest(){
        
        
        // On cree des réalisateurs, sans tenir compte des relations
        Realisateur r1 = new Realisateur("Jack Hazan");
        Realisateur r2 = new Realisateur("Pier Paolo Pasolini");
        Realisateur r3 = new Realisateur("Luis Bunel");
        Realisateur r4 = new Realisateur("Joseph L. Mankiewicz");
        Realisateur r5 = new Realisateur("Arnaud des Pallières");
        Realisateur r6 = new Realisateur("Jean-Claude Brisseau");
        Realisateur r7 = new Realisateur("Alexandre Sokourov");
        Realisateur r8 = new Realisateur("Alexandre Sokourov");
        Realisateur r9 = new Realisateur("Philippe Garrel");
        Realisateur r10 = new Realisateur("Eric Rohmer");
        Realisateur r11 = new Realisateur("Federico Fellini");
        Realisateur r12 = new Realisateur("Alain Resnais");
        Realisateur r13 = new Realisateur("Xavier Dolan");
        Realisateur r14 = new Realisateur("David Michôd");
        Realisateur r15 = new Realisateur("Maurice Pialat");
        Realisateur r16 = new Realisateur("Joel Coen");
        Realisateur r17 = new Realisateur("Jean Vigo");
        Realisateur r18 = new Realisateur("Martin Scorsese");
        Realisateur r19 = new Realisateur("Ingmar Bergman");
        Realisateur r20 = new Realisateur("Guy Gilles");
       
        /*
         * on cree des acteurs  sans tenir compte des relations
         */
        Acteur a1 = new Acteur("Lindsay Lohan");
        Acteur a2 = new Acteur("Kristen Johnston");
        Acteur a3 = new Acteur("Julia Fiona Roberts");
        Acteur a4 = new Acteur("Sarah Michelle Gellar");
        Acteur a5 = new Acteur("Whoopi Goldberg");
        Acteur a6 = new Acteur("Megan Fox");
        Acteur a7 = new Acteur("Keira Knightley");
        Acteur a8 = new Acteur("Jennifer Lopez");
        Acteur a9 = new Acteur("Angelina Jolie Voigt");
        Acteur a10 = new Acteur("Kristin Laura Kreuk");
        Acteur a11 = new Acteur("Jodie Foster");
        Acteur a12 = new Acteur(" Marilyn Monroe ");
        Acteur a13 = new Acteur("Eva Longoria");
        Acteur a14 = new Acteur("Whitney Elizabeth Houston");
        Acteur a15 = new Acteur("Demetria Gene Guynes");
        Acteur a16 = new Acteur("Hilary Ann Duff");
        Acteur a17 = new Acteur("Carmen Electra");
        Acteur a18 = new Acteur("Carrie-Anne Moss");
        Acteur a19 = new Acteur("Cameron Michelle Diaz");
        Acteur a20 = new Acteur("Omar Sy");
        
        
        
        
        /*
         * creer des listes des acteurs
         */
        Collection<Acteur> collectionActeur1 = new ArrayList<Acteur>();
        collectionActeur1.add(a1);
        collectionActeur1.add(a2);
        collectionActeur1.add(a3);
        collectionActeur1.add(a4);
        collectionActeur1.add(a5);
       
        
        Collection<Acteur> collectionActeur2 = new ArrayList<Acteur>();
        collectionActeur2.add(a6);
        collectionActeur2.add(a7);
        collectionActeur2.add(a8);
        collectionActeur2.add(a9);
        
        Collection<Acteur> collectionActeur3 = new ArrayList<Acteur>();
        collectionActeur3.add(a10);
        collectionActeur3.add(a11);
        collectionActeur3.add(a12);
        collectionActeur3.add(a13);
        collectionActeur3.add(a14);
        
        Collection<Acteur> collectionActeur4 = new ArrayList<Acteur>();
        collectionActeur4.add(a15);
        collectionActeur4.add(a16);
        collectionActeur4.add(a17);
        collectionActeur4.add(a18);
        
        Collection<Acteur> collectionActeur5 = new ArrayList<Acteur>();
        collectionActeur5.add(a19);
        collectionActeur5.add(a20);
        collectionActeur5.add(a1);
        collectionActeur5.add(a5);
        collectionActeur5.add(a11);
        
        Collection<Acteur> collectionActeur6 = new ArrayList<Acteur>();
        collectionActeur6.add(a8);
        collectionActeur6.add(a7);
        collectionActeur6.add(a18);
        collectionActeur6.add(a14);
        collectionActeur6.add(a16);
        
        Collection<Acteur> collectionActeur7 = new ArrayList<Acteur>();
        collectionActeur7.add(a7);
        collectionActeur7.add(a9);
        collectionActeur7.add(a19);
        collectionActeur7.add(a2);
        collectionActeur7.add(a20);
        
        Collection<Acteur> collectionActeur8 = new ArrayList<Acteur>();
        collectionActeur8.add(a4);
        collectionActeur8.add(a3);
        collectionActeur8.add(a8);
        collectionActeur8.add(a12);
        
        Collection<Acteur> collectionActeur9 = new ArrayList<Acteur>();
        collectionActeur9.add(a9);
        collectionActeur9.add(a10);
        collectionActeur9.add(a5);
        collectionActeur9.add(a6);
        
        Collection<Acteur> collectionActeur10 = new ArrayList<Acteur>();
        collectionActeur10.add(a16);
        collectionActeur10.add(a19);
        collectionActeur10.add(a11);
        collectionActeur10.add(a17);
        collectionActeur10.add(a2);
        
        
        /*
         * on cree des genres 
         */
        Genre g1 =new  Genre("Policier");
        Genre g2 = new  Genre("Comedie");
        Genre g3 = new  Genre("Action");
        Genre g4 = new  Genre("Adulte");
        Genre g5 = new  Genre("Romantique");
        Genre g6 = new  Genre("Drame");
        Genre g7 = new  Genre("Aventure");
        Genre g8 = new  Genre("Crime");
        Genre g9 = new  Genre("Docmentaire");
        Genre g10 = new  Genre("Animation");
        
        Film f1 =creerUnFilm("A bout de souffle","A la suite d’un accident de ...","image1", 1258, 85,g1,collectionActeur1,r1, null, null);
        Film f2 = creerUnFilm("Adieu","film tres rigilo","image2", 1258, 85, g2,collectionActeur2,r2, null, null);
        Film f3 =creerUnFilm("Accattone","Pour mieux se venger de...","image2", 1358, 85, g3,collectionActeur2,r3, null, null);
        Film f4 = creerUnFilm("L'âge d'or","La lumiere eclatat et...","image3", 1458, 85, g4,collectionActeur3,r4, null, null);
        Film f5 = creerUnFilm("Aguirre la colère de Dieu","De nos jours...","image4", 1558, 85, g5,collectionActeur4,r5, null, null);
        Film f6 = creerUnFilm("Bamako","du vet à a ...","image5", 1258, 85, g6,collectionActeur5,r6, null, null);
        Film f7 = creerUnFilm("Baisers volés","Suite à une mauvaise...","image6", 1268, 85, g7,collectionActeur6,r7, null, null);
        Film f8 = creerUnFilm("The Barber","L'acter na rien regrété à part...","image6", 1858, 85, g8,collectionActeur7,r8, null, null);
        Film f9 = creerUnFilm("Bataille sur le grand fleuve","Arié il ya seulement 2 ans...","image5", 1258, 85, g6,collectionActeur8,r9, null, null);
        Film f10 = creerUnFilm("Bellamy","suite à de ombreux obstacles...","image4", 1958, 85, g9,collectionActeur9,r10, null, null);
        Film f11 = creerUnFilm("ça brûle ","A mere ne pouvant plusde sa fille...","image3", 1278, 85, g10,collectionActeur10,r11, null, null);
        Film f12 = creerUnFilm("Le café lumière","Comme dans son precedant role  sr...","image2", 1252, 85, g9,collectionActeur9,r12, null, null);
        Film f13 = creerUnFilm("ça rend heureux","D'un eanere generale,l'cateur...","image1", 2008, 85, g8,collectionActeur8,r13, null, null);
        Film f14 = creerUnFilm("Ce jour là","Le vent des anges souffla...","image1", 1258, 85, g7,collectionActeur7,r14, null, null);
        Film f15 = creerUnFilm("Dans la nuit","commeonne laurait jamas vue...","image2", 2007, 85, g6,collectionActeur6,r15, null, null);
        Film f16 = creerUnFilm("De la guerre","Voulant consutr  ses...","image3", 2010, 85, g5,collectionActeur5,r16, null, null);
        Film f17 = creerUnFilm("Les dames du bois de Boulogne","Apres de nombreuse deseptions suite...","image4", 1960, 85, g4,collectionActeur4,r17, null, null);
        Film f18 = creerUnFilm("La demoiselle d'honneur","Voulant coute que cote se vanger de sa ...","image5", 2003, 85, g3,collectionActeur3,r18, null, null);
        Film f19 = creerUnFilm("Le désert rouge","A la mort de sa ...","image6", 2002, 85, g2,collectionActeur2,r19, null, null);
        Film f20 = creerUnFilm("Des Hommes et des Dieux","sute à un accidet...","image6", 2005, 85, g1,collectionActeur1,r20, null, null);
        Film f21 = creerUnFilm("Les égarés","Ne  pouvant plus ....","image5", 2006, 85, g2,collectionActeur2,r1, null, null);
        Film f22 = creerUnFilm("Eldorado","ne fois repere...","image4", 2007, 85, g3,collectionActeur3,r2, null, null);
        Film f23 = creerUnFilm("Eloge de l'amour","A la 41eme...","image3", 2008, 85, g4,collectionActeur4,r3, null, null);
        Film f24 = creerUnFilm("Les enchainés","Une fois ...","image2", 2009, 85, g5,collectionActeur5,r4, null, null);
        Film f25 = creerUnFilm("Le faux coupable","malchaceuse depuis quelle à...","image1", 2010, 85, g6,collectionActeur6,r5, null, null);
        Film f26 = creerUnFilm("La femme de l'aviateur","desesperé par se nombreux...","image6", 1258, 85, g7,collectionActeur7,r6, null, null);
        Film f27 = creerUnFilm("Fênetre sur cour","Etant degoute par ...","image5", 2011, 85, g8,collectionActeur8,r7, null, null);
        Film f28 = creerUnFilm("Good bye dragon inn","Souhaitant  avoir ....","image4", 2012, 85, g9,collectionActeur9,r8, null, null);
        Film f29 = creerUnFilm("Le genou de Claire","n coup dure pour...","image3", 2013, 85, g10,collectionActeur10,r9, null, null);
        Film f30 = creerUnFilm("La graine et le mulet","Suite à son voyage ...","image2", 2014, 85, g9,collectionActeur9,r10, null, null);
        Film f31 = creerUnFilm("Le grand alibi","De retour chez elle...","image1", 2015, 85, g8,collectionActeur8,r11, null, null);
        Film f32 = creerUnFilm("La guerre est finie","Apres un longue absenc...","image2", 2016, 85, g7,collectionActeur7,r12, null, null);
        Film f33 = creerUnFilm("Hélas pour moi","","image3", 1988, 85, g6,collectionActeur6,r13, null, null);
        Film f34 = creerUnFilm("Hors Satan","un bon film","image4", 1999, 85, g5,collectionActeur5,r14, null, null);
        Film f35 = creerUnFilm("House by the river","plus dide pour  la synopsie","image5", 2000, 85, g4,collectionActeur4,r15, null, null);
        Film f36 = creerUnFilm("Les idiots","pas besoin de synopsie","image6", 1985, 85, g3,collectionActeur3,r16, null, null);
        Film f37 = creerUnFilm("Les innocents","vous verz la description  n video","image6", 1992, 85, g2,collectionActeur2,r17, null, null);
        Film f38 = creerUnFilm("Intimité","Rien a ire  dans cette partie","image5", 1987, 85, g1,collectionActeur1,r18, null, null);
        Film f39 = creerUnFilm("Intolérance","Fin des synopsies","image4", 1958, 85, g2,collectionActeur2,r19, null, null);
        Film f40 = creerUnFilm("Les invisibles","Rien na relater","image3", 1758, 85, g3,collectionActeur3,r20, null, null);
        Film f41 = creerUnFilm("Les invisibles","Un film tres interessat","image2", 1858, 85, g4,collectionActeur4,r1, null, null);
        Film f42 = creerUnFilm("Je suis un aventurier","pas besoin de detail","image1", 1278, 85, g5,collectionActeur5,r2, null, null);
        Film f43 = creerUnFilm("Jour de fête","Nous en voulons plus","image6", 1288, 85, g6,collectionActeur6,r3, null, null);
        Film f44 = creerUnFilm("Kabe no naka no himegoto","Films tres rigilo","image5", 1658, 85, g7,collectionActeur7,r4, null, null);
        Film f45 = creerUnFilm("Laurence anyways","plusrien pur la synopsie","image4", 1258, 85, g8,collectionActeur8,r5, null, null);
        Film f46 = creerUnFilm("Last days","Plus besoin","image3", 2001, 85, g9,collectionActeur9,r6, null, null);
        Film f47 = creerUnFilm("Le lieu du crime","Bon rien a signaler","image2", 2009, 85, g10,collectionActeur10,r6, null, null);
        Film f48 = creerUnFilm("Little fugitive","Rien de particulier","image1", 2002, 85, g9,collectionActeur9,r6, null, null);
        Film f49 = creerUnFilm("La maman et la putain","bcp de recommandation suite ...","image2", 2005, 85, g8,collectionActeur8,r6, null, null);
        Film f50 = creerUnFilm("La mariée était en noir","bla bla bla blou blou blou","image3", 2004, 85, g7,collectionActeur7,r6, null, null);
        {
            creerUtilisateur("user", "user", "Utilisateur", "client", "diallamsgmail.com", null, null);
        }
    }
    
    /*
     * Selectionne la liste de tous les films
     */
    public Collection<Film> getAllFilm() {    
        Query q = em.createQuery("select f from Film f");  
        return q.getResultList();  
    }
    
    /*
      *  Mise à jour de la colonne annee dans la table film
      */
     public Collection<Film> getList(){
         Query query = em.createQuery("Update Film f Set f.annee = f.annee+2 ");
         int updatecount = query.executeUpdate();
         return (Collection<Film>)query.getResultList();
     }
     /*
      * Nombre d'elements(films) à afficher
      */
     /*
      * affiche les films  des groupes de 3
      */
     public Collection<Film> getList1(){
         Query query = em.createQuery("SELECT f FROM Film f");
            query.setMaxResults(3); 
            return query.getResultList();
     }
    public void persist(Object object) {
        em.persist(object);
        
    }
/**
 * fonction qui va permettre de recuperer les films en fonction de idGenre qui se trouve 
 * dans l'entity Film
 */
    public Collection<Film> getFilmParGenre(int idGenre){
        Query q = em.createQuery("select f from Film f where f.genre.id=:param");
        q.setParameter("param", idGenre);
        return q.getResultList();
    }
   
}

    
